package com.lam.common.components.parameter;

import com.lam.common.components.redis.RedisUtil;
import com.lam.common.components.parameter.constant.ParameterConstant;
import com.lam.common.components.parameter.service.ConfigService;
import com.lam.common.utils.JsonUtil;
import com.lam.common.utils.NumberUtil;
import com.lam.common.utils.SpringUtils;
import com.lam.common.utils.StringUtils;

public class ParameterConfigUtil {
	
	private static ConfigService configService;
	
	public static ConfigService getConfigService() {
		if(configService == null) {
			configService = SpringUtils.getBean(ConfigService.class);
		}
		return configService;
	}
	
	public static Boolean getBoolean(String configKey) {
		return NumberUtil.toBoolean(getValue(configKey));
	}
	
	public static Boolean getBoolean(String configKey, Boolean defVal) {
		return NumberUtil.toBoolean(getValue(configKey), defVal);
	}
	
	public static Integer getInteger(String configKey) {
		return NumberUtil.toInteger(getValue(configKey));
	}
	
	public static Integer getInteger(String configKey, Integer defVal) {
		return NumberUtil.toInteger(getValue(configKey), defVal);
	}
	
	public static Long getLong(String configKey) {
		return NumberUtil.toLong(getValue(configKey));
	}
	
	public static Long getLong(String configKey, Long defVal) {
		return NumberUtil.toLong(getValue(configKey), defVal);
	}
	
	public static Double getDouble(String configKey) {
		return NumberUtil.toDouble(getValue(configKey));
	}
	
	public static Double getDouble(String configKey, Double defVal) {
		return NumberUtil.toDouble(getValue(configKey), defVal);
	}
	
	public static String getValue(String configKey, String defaultVal) {
		String value = getValue(configKey);
		if(StringUtils.isNotBlank(value)) {
			return value;
		}
		return defaultVal;
	}

	public static String getValue(String configKey) {
		if(StringUtils.isBlank(configKey)) {
			return null;
		}
		String key = ParameterConstant.SYS_PARAMETER_KEY + configKey;
		String value = JsonUtil.toString(RedisUtil.get(key));
		if(value != null) {
			return value;
		}
		value = getConfigService().selectByKey(configKey);
		if(value != null) {
			RedisUtil.set(key, value, ParameterConstant.SYS_PARAMETER_EXPIRE);
		}
		return value;
	}
	
	public static void clear(String configKey) {
		if(StringUtils.isBlank(configKey)) {
			return ;
		}
		RedisUtil.del(ParameterConstant.SYS_PARAMETER_KEY + configKey);
	}
	
	public static void clearAll() {
		RedisUtil.removeAll(ParameterConstant.SYS_PARAMETER_KEY);
	}
	
}
